package unit_test;

import mains.Main;
import mains.Main.MainNonValideException;
import mains.RangPoker;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class MainTest extends TestCase {
	
	public static Test suite() {
		return new TestSuite(MainTest.class);
	}
	
	public void testEstValide() {
		assertFalse(new Main().estValide());
		
		assertTrue(UsineMain.getBidon().estValide());
	}
	
	public void testGetRangPoker() {
		try {
			new Main().getRangPoker();
			fail("Exception non gere");
		}
		catch (Exception e){
			assertTrue(true);
		}
		
		/*
		 * On obtient un rang
		 */
		assertTrue(UsineMain.getMainPleine().getRangPoker().equals(RangPoker.MAIN_PLEINE));
	}
	
	public void testCompareTo() {
		/*
		 * Compare une main avec une carte superieur egale
		 */
		assertTrue(UsineMain.getBidon().compareTo(UsineMain.getBidon()) == 0);
		
		/*
		 * comparaison de breland avec lui-meme, un plus petit et un plus grand au niveau du kicker et normal
		 */
		assertTrue(UsineMain.getBreland().compareTo(UsineMain.getBreland()) == 0);
		assertTrue(UsineMain.getBreland().compareTo(UsineMain.getBrelandPLusGrandKicker()) < 0);
		assertTrue(UsineMain.getBreland().compareTo(UsineMain.getBrelandPLusPetitKicker()) > 0);
		assertTrue(UsineMain.getBreland().compareTo(UsineMain.getBrelandPLusGrand()) < 0);
		assertTrue(UsineMain.getBreland().compareTo(UsineMain.getBrelandPLusPetit()) > 0);
		
		/*
		 * comparaison de carre avec lui-meme, un plus petit et un plus grand au niveau du kicker et normal
		 */
		assertTrue(UsineMain.getCarre().compareTo(UsineMain.getCarre()) == 0);
		assertTrue(UsineMain.getCarre().compareTo(UsineMain.getCarrePLusGrandKicker()) < 0);
		assertTrue(UsineMain.getCarre().compareTo(UsineMain.getCarrePLusPetitKicker()) > 0);
		assertTrue(UsineMain.getCarre().compareTo(UsineMain.getCarrePLusGrand()) < 0);
		assertTrue(UsineMain.getCarre().compareTo(UsineMain.getCarrePLusPetit()) > 0);
		
		/*
		 * comparaison de couleur avec elle-meme, un plus petit et un plus grand
		 */
		assertTrue(UsineMain.getCouleur().compareTo(UsineMain.getCouleur()) == 0);
		assertTrue(UsineMain.getCouleur().compareTo(UsineMain.getCouleurPLusGrand()) < 0);
		assertTrue(UsineMain.getCouleur().compareTo(UsineMain.getCouleurPLusPetit()) > 0);
		
		/*
		 * comparaison de deux paires avec elle-meme, un plus petit et un plus grand, au niveau du kicker et normal
		 */
		assertTrue(UsineMain.getDeuxPaires().compareTo(UsineMain.getDeuxPaires()) == 0);
		assertTrue(UsineMain.getDeuxPaires().compareTo(UsineMain.getDeuxPairesPLusGrandKicker()) < 0);
		assertTrue(UsineMain.getDeuxPaires().compareTo(UsineMain.getDeuxPairesPLusPetitKicker()) > 0);
		assertTrue(UsineMain.getDeuxPaires().compareTo(UsineMain.getDeuxPairesPLusGrand()) < 0);
		assertTrue(UsineMain.getDeuxPaires().compareTo(UsineMain.getDeuxPairesPLusPetit()) > 0);
		
		/*
		 * comparaison de main pleine avec elle-meme, un plus petit et un plus grand
		 */
		assertTrue(UsineMain.getMainPleine().compareTo(UsineMain.getMainPleine()) == 0);
		assertTrue(UsineMain.getMainPleine().compareTo(UsineMain.getMainPleinePLusGrand()) < 0);
		assertTrue(UsineMain.getMainPleine().compareTo(UsineMain.getMainPleinePLusPetit()) > 0);
		
		/*
		 * comparaison de paire avec elle-meme, un plus petit et un plus grand, au niveau du kicker et normal
		 */
		assertTrue(UsineMain.getPaire().compareTo(UsineMain.getPaire()) == 0);
		assertTrue(UsineMain.getPaire().compareTo(UsineMain.getPairePLusGrandKicker()) < 0);
		assertTrue(UsineMain.getPaire().compareTo(UsineMain.getPairePLusPetitKicker()) > 0);
		assertTrue(UsineMain.getPaire().compareTo(UsineMain.getPairePLusGrand()) < 0);
		assertTrue(UsineMain.getPaire().compareTo(UsineMain.getPairePLusPetit()) > 0);
		
		/*
		 * comparaison de quinte couleur avec elle-meme, un plus petit et un plus grand
		 */
		assertTrue(UsineMain.getQuinteCouleur().compareTo(UsineMain.getQuinteCouleur()) == 0);
		assertTrue(UsineMain.getQuinteCouleur().compareTo(UsineMain.getQuinteCouleurAs()) > 0);
		assertTrue(UsineMain.getQuinteCouleur().compareTo(UsineMain.getQuinteCouleurPLusGrand()) < 0);
		assertTrue(UsineMain.getQuinteCouleur().compareTo(UsineMain.getQuinteCouleurPLusPetit()) > 0);
		assertTrue(UsineMain.getQuinteCouleur().compareTo(UsineMain.getQuinteCouleurPLusGrandCouleur()) < 0);
		assertTrue(UsineMain.getQuinteCouleur().compareTo(UsineMain.getQuinteCouleurPLusPetitCouleur()) > 0);
		
		/*
		 * comparaison de quinte avec elle-meme, un plus petit et un plus grand et un egale
		 * mais avec une carte double
		 */
		assertTrue(UsineMain.getQuinte().compareTo(UsineMain.getQuinte()) == 0);
		assertTrue(UsineMain.getQuinte().compareTo(UsineMain.getQuinteDouble()) == 0);
		assertTrue(UsineMain.getQuinte().compareTo(UsineMain.getQuintePLusGrand()) < 0);
		assertTrue(UsineMain.getQuinte().compareTo(UsineMain.getQuintePLusPetit()) > 0);
		
		/*
		 * comparaison de quintuplet avec lui-meme, un plus petit et un plus grand
		 * ***** NE FONCTIONNE PAS CAR LA MAIN EST NON VALIDE *****
		 */
		try {
			assertTrue(UsineMain.getQuintuplet().compareTo(UsineMain.getQuintuplet()) == 0);
			assertTrue(UsineMain.getQuintuplet().compareTo(UsineMain.getQuintupletPLusGrand()) < 0);
			assertTrue(UsineMain.getQuintuplet().compareTo(UsineMain.getQuintupletPLusPetit()) > 0);
		}
		catch (MainNonValideException mnve) {
			
		}
	}
	
	public void testFirst() {
		assertTrue(UsineMain.getBidon().first().compareTo(UsineMain.getCarteForte()) == 0);
	}

}
